home *** CD-ROM | disk | FTP | other *** search
/ Amiga Format CD 49 / Amiga Format CD49 (2000-01-17)(Future Publishing)(GB)(Track 1 of 3)[!][issue 2000-02].iso / -serious- / workbench / visualprefs / docsitaliano / vp-developer.doc < prev    next >
Text File  |  1999-11-29  |  6KB  |  148 lines

  1.  
  2.                               Introduzione:
  3.  
  4.                L'INTERFACCIA DI VISUALPREFS PER SVILUPPATORI
  5.  
  6.                         Documento in preparazione
  7.  
  8.  
  9. Se sei uno sviluppatore puoi usufruire di certe funzionalità di VisualPrefs.
  10.  
  11. Anche se non esiste ancora una vera e propria API di VisualPrefs per gli
  12. sviluppatori è già possibile utilizzare le classi BOOPSI che VisualPrefs
  13. aggiunge al sistema.
  14.  
  15. Lo scopo di queste classi è fornire ai programmatori un modo facile di
  16. ottenere il "look di VisualPrefs" senza dover aspettare che io implementi
  17. in VisualPrefs un patch per i loro applicativi. ;-)
  18.  
  19. Attualmente c'è solo una classe:
  20.  
  21. "tbiclass" - la classe di immagini per la titlebar (titlebar image class)
  22.  
  23. Questa classe fornisce le immagini più comunemente usate per i gadget
  24. aggiunti dagli applicativi alla titlebar delle loro finestre. Esempi di
  25. ciò sono l'onnipresente gadget "iconify" o il gadget "padlock" di DirOpus 5.
  26.  
  27. Tutti i programmi che usano questa classe riceveranno automaticamente lo
  28. stesso aspetto per le loro immagini per la titlebar se VisualPrefs è in
  29. funzione. Probabilmente è meglio che avere miriadi di versioni diverse
  30. della stessa immagine...
  31.  
  32. Puoi usare "tbiclass" proprio come "sysiclass"; sono entrambe sottoclassi di
  33. "imageclass". Un'immagine "tbiclass" può essere creata chiamando NewObject()
  34. con i seguenti tag:
  35.  
  36. SYSIA_DrawInfo - Questo è assolutamente necessario. DEVI passare a "tbiclass"
  37.                  un puntatore a DrawInfo oppure NewObject() fallirà.
  38.  
  39. SYSIA_Which - Per specificare quale immagine si vuole; attualmente ci sono
  40.               sei tipi di immagine:
  41.  
  42.               POPUPIMAGE    - Immagine per il gadget "pop-up" di MUI
  43.               MUIIMAGE      - Immagine per il gadget "settings" di MUI
  44.               SNAPSHOTIMAGE - Immagine per il gadget "snapshot" di MUI
  45.               ICONIFYIMAGE  - Immagine per il gadget "iconify"
  46.               PADLOCKIMAGE  - Immagine per il gadget "padlock" di DirOpus
  47.               TBFRAMEIMAGE  - Immagine vuota (solo contorno) di uso generale
  48.  
  49. IA_Width, IA_Height - Questi sono riconosciuti solo dal tipo TBFRAMEIMAGE;
  50.                       gli altri tipi di immagine li ignorano e hanno sempre
  51.                       la stessa dimensione del gadget di profondità.
  52.  
  53. SYSIA_ReferenceFont - Questo è riconosciuto solo dal tipo TBFRAMEIMAGE;
  54.                       gli altri tipi di immagine lo ignorano e hanno sempre
  55.                       la stessa altezza del gadget di profondità.
  56.  
  57. È anche possibile usare questo tag con GetAttr():
  58.  
  59. TBIA_ContentsBox - Per chiedere all'immagine la posizione e la dimensione
  60.                    del suo effettivo "box dei contenuti" relativamente
  61.                    all'immagine stessa. Tale box è la parte in cui, se
  62.                    necessario, è possibile aggiungere ulteriori immagini
  63.                    personalizzate. Questo probabilmente ha senso solo con
  64.                    immagini TBFRAMEIMAGE. Per posizionare correttamente il
  65.                    box occorre aggiungere i suoi valori di offset Left e Top
  66.                    a quelli dell'immagine. Notare che, anche entro le
  67.                    dimensioni restituite, bisognerebbe sempre lasciare un
  68.                    piccolo spazio (per esempio due pixel) intorno alle
  69.                    proprie immagini, per ottenere risultati esteticamente
  70.                    migliori. Questo è un attributo a sola lettura; il valore
  71.                    che si passa a questo tag deve essere un puntatore a una
  72.                    struttura IBox. NON passare un puntatore a longword!
  73.                    (Disponibile a partire da VisualPrefs 41.35)
  74.  
  75. Naturalmente se NewObject() fallisce dovresti fornire una immagine di ripiego
  76. creata dal tuo programma. Tuttavia ho rilasciato una classe "tbiclass"
  77. esterna freeware (dev/gui/titlebar_ic.lha) che potrai includere nella
  78. distribuzione dei tuoi applicativi. Questa classe fornirà le immagini
  79. necessarie e verrà sostituita automaticamente da quella di VisualPrefs
  80. se sarà presente.
  81. Di conseguenza puoi mantenere molto semplici le tue immagini di ripiego,
  82. o non averle affatto ;-)
  83.  
  84. È importante notare che tutte le istanze di immagini "tbiclass" avranno un
  85. valore di -1 in Image->LeftEdge. Questo non dovrebbe venire modificato e
  86. dovresti posizionare i tuoi gadget nella titlebar rispettando ciò. Il motivo
  87. di questo apparentemente strano comportamento è che anche le immagini dei
  88. gadget di Intuition per la titlebar funzionano in questo modo, e dovremmo
  89. cercare di mantenere la massima compatibilità con Intuition.
  90.  
  91. Inoltre assicurati di modificare se necessario la dimensione del tuo gadget
  92. per adattarla alla dimensione dell'immagine ottenuta.
  93.  
  94. Un esempio di tutto ciò potrebbe essere:
  95.  
  96.    ...
  97.  
  98.    /* Crea l'immagine */
  99.  
  100.    if (!(iconifyimage = NewObject(NULL,"tbiclass",SYSIA_Which,ICONIFYIMAGE,
  101.                                                   SYSIA_DrawInfo,dri,
  102.                                                   TAG_END)))
  103.    {
  104.       iconifyimage = builtin_iconifyimage;
  105.    }
  106.  
  107.    /* Usa l'immagine */
  108.  
  109.    gad->GadgetRender = iconifyimage;
  110.    ...
  111.  
  112.    /* Libera l'immagine */
  113.  
  114.    if (iconifyimage != builtin_iconifyimage) DisposeObject(iconifyimage);
  115.  
  116.    ...
  117.  
  118. Questo è tutto. Il vero file include per "tbiclass" si trova nella release
  119. a sè stante su Aminet, comunque tutto ciò che ti serve per usare "tbiclass"
  120. nei tuoi applicativi è inserire le righe seguenti in cima al tuo codice
  121. sorgente. :-]
  122.  
  123. ------ taglia qui ------8<------ taglia qui ------8<------ taglia qui ------
  124.  
  125. #define POPUPIMAGE    (101)
  126. #define MUIIMAGE      (102)
  127. #define SNAPSHOTIMAGE (103)
  128. #define ICONIFYIMAGE  (104)
  129. #define PADLOCKIMAGE  (105)
  130. #define TBFRAMEIMAGE  (106)
  131.  
  132. #define TBIA_Dummy       (TAG_USER + 0x0B0000)
  133. #define TBIA_ContentsBox (TBIA_Dummy + 0x0001)
  134.  
  135. ------ taglia qui ------8<------ taglia qui ------8<------ taglia qui ------
  136.  
  137. C'è già un applicativo che usa "tbiclass", ViNCEd di Thomas Richter.
  138.  
  139. Spero che anche tu supporterai "tbiclass" e contribuirai in tal modo a
  140. dare finalmente un aspetto consistente a tutti i gadget per la titlebar
  141. usati negli applicativi!
  142.  
  143. Grazie,
  144.                                       Massimo Tantignone (tanti@intercom.it)
  145.  
  146.  
  147.  
  148.